package _binary_tree

import common.TreeNode
import org.junit.Assert
import org.junit.Test

/**
 * https://leetcode.cn/problems/root-equals-sum-of-children/description
 * ```
 * 2236. 判断根结点是否等于子结点之和
 *
 * 给你一个 二叉树 的根结点 root，该二叉树由恰好 3 个结点组成：根结点、左子结点和右子结点。
 * 如果根结点值等于两个子结点值之和，返回 true ，否则返回 false 。
 *
 * 示例 1：
 * 输入：root = [10,4,6]
 * 输出：true
 * 解释：根结点、左子结点和右子结点的值分别是 10 、4 和 6 。
 * 由于 10 等于 4 + 6 ，因此返回 true 。
 *
 * 示例 2：
 * 输入：root = [5,3,1]
 * 输出：false
 * 解释：根结点、左子结点和右子结点的值分别是 5 、3 和 1 。
 * 由于 5 不等于 3 + 1 ，因此返回 false 。
 *
 *
 * 提示：
 * 树只包含根结点、左子结点和右子结点
 * -100 <= Node.val <= 100
 * ```
 */
class leetcode_2236 {

    @Test
    fun test_1() {
        val root = TreeNode(10)
        root.left = TreeNode(4)
        root.right = TreeNode(6)

        val actual = checkTree(root)
        val expected = true
        Assert.assertEquals(expected, actual)
    }

    private fun checkTree(root: TreeNode?): Boolean {
        /**
        题型：二叉树

        思路：
        题目中只有3个节点，所以不用遍历，直接计算左右节点的值，然后把和与根节点的值比较


        时间复杂度：O（1）
        空间复杂度：O（1）

         */
        if (root == null) {
            return true
        }

        var sum: Int = 0
        sum = root.left!!.`val` + root.right!!.`val`
        // val sum : Int = collect(root))

        // println(sum)
        return sum == root.`val`
    }
}